草庐IT

Java BufferedImage 内存消耗

全部标签

c++ - 我可以通过 C++ 中的(无符号)char* 读取任何可读的有效内存位置吗?

今天我的搜索foo似乎缺少。我想知道根据标准C++通过(unsigned(?))char*检查“任何”内存位置是否合法。任何位置是指程序内对象或数组(或数组内部)的任何有效地址。举个例子:voidpassAnyObjectOrArrayOrSomethingElseValid(void*pObj){unsignedchar*pMemory=static_cast(pObj)MyTypeIdentifyierx=tryToFigureOutWhatThisIs(pMemory);}免责声明:这个问题纯粹是学术性的。我不打算将其放入生产代码中!合法我的意思是,如果根据标准它真的合法,那就是

c++ - 内存中静态方法和非静态函数的区别

据我了解,类的每个实例在内存中都有自己的成员变量,这样它就可以为不同的对象存储不同的值。但是,成员函数就不一样了。成员函数在一个类的对象之间重复使用,因此它只有一个地址和一block内存,以便在所有对象需要时引用。静态函数是用来访问静态成员的。但是,静态函数在其应用程序的生命周期内也只存在一个。除了作为静态访问器之外,在低级别它与普通类函数没有什么不同,不是吗?或者也许我错了,每个类都有自己的功能? 最佳答案 非静态函数接受额外的参数,this,它是指向具有实例特定变量的类实例的指针。静态函数没有这个参数(因此你不能在静态函数中使用

C++内存分配问题

我的代码如下:#includeintmain(){intii=123;charstr[7]="";strcpy(str,"123456");return0;}我在VS2010中运行,内存如下我很好奇内存中的cc是干什么用的?cc的个数又是如何计算的? 最佳答案 在VisualStudio中为“调试”进行编译时,cc通常用于填充未初始化的内存。这样,当您访问未初始化的内存时,它会更加明显。例如,如果您尝试取消引用一个未初始化的指针,您可能会得到如下内容:AccessViolationaccessing0xcccccccc或类似的东西。

c++ - 预分配内存空间供程序使用

在我的Windows的C++程序中,我通过调用newCMyClass()在堆上分配了几个小对象(数千个)性能似乎因此受到影响。有没有办法在堆中预先分配一些最小内存供程序使用,以便操作系统在我调用newCMyClass()以提高性能时从这个预先分配的空间开始分配?谢谢。 最佳答案 您似乎在寻找内存池-http://www.codeproject.com/Articles/27487/Why-to-use-memory-pool-and-how-to-implement-it请注意,您可以预先分配一些内存,然后使用placementne

c++ - ptr_vector 是如何管理内存的?

我目前正在使用C++使用OpenGL进行较低级别的编码。我来自沉重的objc背景,所以我对内存管理有一些了解,但我似乎无法理解“boost”库如何管理ptr_vector等容器类型。我认为我的问题与我不知道ptr_vector如何管理自身及其对象的销毁这一事实有关。请看下面的代码://Headerfile...ptr_vectorobjects;...//Implementationfile...voidApplicationEngine::init(){WavefrontObject3D*object=newWavefrontObject3D("Ninja.obj");objects

c++ - 为什么 std::deque 不是在索引 0 之前保留内存的 vector ?

据我所知,deque背后的动机是提供一个具有高效push_front的随机访问容器。与双端队列相比,vector常被提及的优势包括更快的遍历和at(),但主要是它的C兼容性,因为它保证了连续的内存。Deque没有,因为它是内存块的集合,每个内存块都包含多个值。我很困惑。为什么deque不像vector那样构建,而是在索引0之前保留内存以及在索引size-1之后保留内存?这将保证连续的内存,启用高效的push_front,甚至在取消引用迭代器时避免额外的间接访问。为了尽量减少插入过程中的移位,要移位的包含值将取决于插入点。如果在size()/2之前的索引n处插入,则将值向左移动n。否则右

c++ - 分配 'this' 指针的内存

在C++中,this指针作为隐藏参数传递给方法,它实际上指向当前对象,但是“this”指针存储在内存中的什么位置......在堆栈、堆中,数据在哪里? 最佳答案 标准没有指定this指针的存储位置。当在函数调用中将其传递给成员函数时,一些编译器将其传递到寄存器中,而其他编译器将其传递到堆栈中。它还可能取决于编译器选项。关于您唯一可以确定的是this是一个基本类型的右值,因此您不能获取它的地址。并非总是如此。在准标准C++中,您可以分配给this,例如为了指示构造函数失败。这是在引入异常之前。指示构造失败的现代标准方法是抛出异常,以保

c++ - 这会导致 C++ 中的内存泄漏吗?

int*alloc(){int*tmp=newint;returntmp;}intmain(){int*ptr=alloc();............deleteptr;return0;}这里我没有释放tmp但ptr被显式释放。也会tmp因为ptr和tmp指的是同一位置而被释放?如果不是,那么指针tmp会发生什么?会不会导致内存泄漏? 最佳答案 不,这不会导致内存泄漏。内存泄漏是已分配但未返回(不再使用时)的缓冲区(内存块)。在您的alloc()函数中,tmp不是缓冲区...它是一个变量,在调用new之后,保存地址。您的函数返回此

c++ - 使用最少的内部内存资源有效地对进出磁盘的字符串进行排序的算法

我有一个非常(多个TB)存储在磁盘上的大量字符串,我需要按字母顺序排序并尽快存储在另一个文件中(最好是在C/C++中)并用作尽可能少的内部存储器。预先对字符串进行预索引不是一种选择,因此我需要在需要时以接近实时的方式对字符串进行排序。在我的案例中,最好的算法是什么?我更喜欢线性算法的建议,而不是像Lucene这样的现有软件库的链接。 最佳答案 您通常通过将大量外部数据分块分成更小的部分,对它们进行操作并最终将它们合并回来,从而对大量外部数据进行排序。在选择排序算法时,您通常会看一下您的要求:如果您需要时间复杂度保证且稳定,您可以选择

c++ - 常规转换的内存损坏?调用了错误的函数

我有如下小程序:#include#includeusingnamespacestd;classA{public:virtualvoidhello(inti){coutmap_;A*testA=newC();map_[0]=(B*)testA;B*myB=static_cast(map_[0]);myB->nothing();C*testC=newC();map_[1]=(B*)testC;myB=static_cast(map_[1]);myB->nothing();return0;}作为输出,我期待以下内容:CNothingCNothing但这是我得到的:CHello0CNothin